package com.itjin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itjin.model.domain.dto.LearningMaterialUploadDTO;
import com.itjin.model.domain.dto.MaterialAuditDTO;
import com.itjin.model.domain.dto.MaterialBatchAuditDTO;
import com.itjin.model.domain.dto.StatDTO;
import com.itjin.model.domain.entity.LearningMaterial;
import com.itjin.model.domain.vo.LearningMaterialVO;
import com.itjin.model.result.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件服务接口
 */
public interface FileService {

    // ==================== 用户端方法 ====================

    /**
     * 上传学习资料
     */
    Result<LearningMaterialVO> uploadLearningMaterial(LearningMaterialUploadDTO uploadDTO);

    /**
     * 修改学习资料信息（仅限待审核状态）
     */
    Result<Void> updateLearningMaterial(Integer id, LearningMaterialUploadDTO updateDTO);

    /**
     * 删除学习资料（仅限待审核状态）
     */
    Result<Void> deleteLearningMaterial(Integer id);

    /**
     * 分页查询公开的学习资料列表
     */
    Result<Page<LearningMaterialVO>> getPublicMaterials(Integer current, Integer size,
                                                        String collegeName, String subjectType,
                                                        String academicYear, Integer semester,
                                                        String fileType, String keyword,
                                                        String orderBy);

    /**
     * 查询用户上传的资料列表
     */
    Result<Page<LearningMaterial>> getUserMaterials(Integer current, Integer size);

    /**
     * 查询用户待审核的资料列表
     */
    Result<Page<LearningMaterial>> getUserPendingMaterials(Integer current, Integer size);

    /**
     * 获取资料详情
     */
    Result<LearningMaterialVO> getMaterialDetail(Integer id);

    /**
     * 下载资料（增加下载次数）
     */
    Result<String> downloadMaterial(Integer id);

    // ==================== 管理员方法 ====================

    /**
     * 管理员分页查询所有学习资料
     */
    Result<Page<LearningMaterialVO>> getAdminMaterials(Integer current, Integer size,
                                                       Integer auditStatus, String collegeName,
                                                       String subjectType, Integer uploaderId,
                                                       String keyword, String orderBy);

    /**
     * 管理员查询待审核资料列表
     */
    Result<Page<LearningMaterialVO>> getPendingAuditMaterials(Integer current, Integer size);

    /**
     * 管理员审核单个资料
     */
    Result<Void> auditMaterial(MaterialAuditDTO auditDTO);

    /**
     * 管理员批量审核资料
     */
    Result<Void> batchAuditMaterials(MaterialBatchAuditDTO batchAuditDTO);

    /**
     * 管理员强制删除资料（物理删除）
     */
    Result<Void> forceDeleteMaterial(Integer id);

    /**
     * 管理员获取审核统计信息
     */
    Result<List<StatDTO>> getAuditStatistics();

    /**
     * 管理员获取每日上传统计（最近30天）
     */
    Result<List<StatDTO>> getDailyUploadStatistics();

    /**
     * 管理员获取热门下载资料统计（TOP 10）
     */
    Result<List<StatDTO>> getTopDownloadStatistics();
}
